package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.FaseProcesso;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="faseProcessoFaces")
@ViewScoped
public class FaseProcessoFaces extends FacesUtil {
	
	private static final long serialVersionUID = -7977605925364598025L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<FaseProcesso> logicaFaseProcesso;
	
	private FaseProcesso faseProcesso = new FaseProcesso();
	private List<FaseProcesso> listaFaseProcesso = new ArrayList<>();
	private String faseProcessoBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaFaseProcesso.adicionar(faseProcesso);
				adicionarMensagem("Fase do Processo adicionada com sucesso");
				this.buscarFaseProcesso();
				fecharModal("dialogFaseProcesso");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar a Fase do Processo");
		}
	}
	
	public void prepararAdicionar() {
		this.faseProcesso = new FaseProcesso();
		abrirModal("dialogFaseProcesso");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.faseProcesso = logicaFaseProcesso.obterPorId(FaseProcesso.class,idArea);
			
			if (editar) {
				abrirModal("dialogFaseProcesso");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaFaseProcesso.editar(this.faseProcesso);
				adicionarMensagem("Fase do Processo editada com sucesso");
				fecharModal("dialogFaseProcesso");
				this.buscarFaseProcesso();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar a Fase do Processo");
		}
	}
	
	public void remover() {
		try {
			logicaFaseProcesso.remover(FaseProcesso.class, this.faseProcesso.getId());
			adicionarMensagem("Fase do Processo removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarFaseProcesso();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover a Fase do Processo");
		}
	}
	
	public void buscarFaseProcesso() {
		if (listaFaseProcesso != null) {
			this.listaFaseProcesso.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(faseProcessoBusca)) {
				this.listaFaseProcesso =  logicaFaseProcesso.buscarTodos(FaseProcesso.class, "fase");
			} else {
				this.listaFaseProcesso = logicaFaseProcesso.buscarPorCampo(FaseProcesso.class, "fase", faseProcessoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.faseProcesso.getFase())) {
			adicionarMensagem("O campo fase é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaFaseProcesso(DefaultLogicaContract<FaseProcesso> logicaFaseProcesso) {
		this.logicaFaseProcesso = logicaFaseProcesso;
	}

	public List<FaseProcesso> getListaFaseProcesso() {
		return listaFaseProcesso;
	}

	public void setListaFaseProcesso(List<FaseProcesso> listaFaseProcesso) {
		this.listaFaseProcesso = listaFaseProcesso;
	}

	public String getFaseProcessoBusca() {
		return faseProcessoBusca;
	}

	public void setFaseProcessoBusca(String FaseProcessoBusca) {
		this.faseProcessoBusca = FaseProcessoBusca;
	}

	public FaseProcesso getFaseProcesso() {
		return faseProcesso;
	}

	public void setFaseProcesso(FaseProcesso FaseProcesso) {
		this.faseProcesso = FaseProcesso;
	}
	
	
}